Warning: package ‘rvest’ was built under R version 4.1.2
Warning: package ‘syuzhet’ was built under R version 4.1.2
Warning: package ‘sentimentr’ was built under R version 4.1.2
Registered S3 method overwritten by 'data.table':
method from
print.data.table
Attaching package: ‘sentimentr’
The following object is masked from ‘package:syuzhet’:
get_sentences
Warning: package ‘gplots’ was built under R version 4.1.2
Attaching package: ‘gplots’
The following object is masked from ‘package:stats’:
lowess
Warning: package ‘tm’ was built under R version 4.1.2
Loading required package: NLP
Warning: package ‘NLP’ was built under R version 4.1.1
Warning: package ‘factoextra’ was built under R version 4.1.2
Loading required package: ggplot2
Attaching package: ‘ggplot2’
The following object is masked from ‘package:NLP’:
annotate
Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
Warning: package ‘beeswarm’ was built under R version 4.1.1
Attaching package: ‘scales’
The following object is masked from ‘package:syuzhet’:
rescale
Warning: package ‘RANN’ was built under R version 4.1.2
Warning: package ‘topicmodels’ was built under R version 4.1.2
Text mining
A tenant at will, who possesses land sufficient to maintain his family for little more than a quit rent, is as dependent upon the proprietor as any servant or retainer whatever, and must obey him with as little reserve. Such a proprietor, as he feeds his servants and retainers at his own house, so he feeds his tenants at their houses. The subsistence of both is derived from his bounty, and its continuance depends upon his good pleasure.
Text basic processing
Adapted from https://eight2late.wordpress.com/2015/09/29/a-gentle-introduction-to-topic-modeling-using-r/.
[1] "Sample sentence:"
Prison Reform: for the benefit of the working class. This is the last word and the only seriously meant word of bourgeois Socialism. It is summed up in the phrase: the bourgeois is a bourgeois for the benefit of the working class.
[1] "After converting to lower case:"
prison reform: for the benefit of the working class. this is the last word and the only seriously meant word of bourgeois socialism. it is summed up in the phrase: the bourgeois is a bourgeois for the benefit of the working class.
[1] "After removing punctuation:"
prison reform for the benefit of the working class this is the last word and the only seriously meant word of bourgeois socialism it is summed up in the phrase the bourgeois is a bourgeois for the benefit of the working class
[1] "After removing numbers:"
prison reform for the benefit of the working class this is the last word and the only seriously meant word of bourgeois socialism it is summed up in the phrase the bourgeois is a bourgeois for the benefit of the working class
[1] "After removing stopwords:"
prison reform benefit working class last word seriously meant word bourgeois socialism summed phrase bourgeois bourgeois benefit working class
[1] "After removing whitespace:"
prison reform benefit working class last word seriously meant word bourgeois socialism summed phrase bourgeois bourgeois benefit working class
[1] "After stemming:"
prison reform benefit work class last word serious meant word bourgeoi social sum phrase bourgeoi bourgeoi benefit work class
Topic modeling
Generate document-term matrices.
Run LDA
Warning: file ‘LDAGibbs_8_DocsToTopics.csv’ has magic number '"","V'
Use of save versions prior to 2 is deprecated
Error in load("../output/LDAGibbs_8_DocsToTopics.csv") :
bad restore file magic number (file may be corrupted) -- no data loaded
The most popular and salient terms for each topic:
| form |
perfect |
duti |
interest |
price |
whole |
polit |
year |
| surplus |
superior |
europ |
term |
quantiti |
stock |
question |
hour |
| process |
sovereign |
home |
expect |
land |
anoth |
struggl |
factori |
| constant |
exercis |
compani |
unit |
tax |
maintain |
movement |
hous |
| accumul |
servic |
commerc |
level |
proport |
fund |
bourgeoi |
half |
| mode |
educ |
wine |
margin |
rent |
want |
revolutionari |
children |
| variabl |
offic |
prohibit |
output |
rise |
divid |
democrat |
million |
| labour |
peopl |
countri |
will |
price |
can |
state |
work |
| valu |
law |
upon |
interest |
produc |
part |
social |
time |
| product |
even |
great |
rate |
quantiti |
differ |
class |
year |
| capit |
govern |
trade |
employ |
money |
must |
polit |
one |
| commod |
public |
good |
increas |
profit |
employ |
econom |
day |
| power |
everi |
manufactur |
wage |
land |
one |
worker |
hour |
| form |
common |
import |
money |
tax |
whole |
develop |
two |
| mean |
like |
part |
capit |
will |
may |
industri |
factori |
Clustering of topics
[1] "Production" "Politics" "Trade" "Finance & Banking" "Property"
[6] "Assets" "Socioeconomics" "Time"

Mind and body. Cartesian - duality between mind and body. justice, good, mind. male vs female, feminism - wollstonecraft. naturalism. religion, god. Deontolgy and consequentialsm. location. free will. society vs self. females focused more on society
good harm action
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7ciBpbmNsdWRlID0gRn0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvPUYsIG1lc3NhZ2U9Riwgd2FybmluZz1GKQ0KYGBgDQoNCg0KYGBge3J9DQpwYWNrYWdlcy51c2VkPWMoInJ2ZXN0IiwgInRpYmJsZSIsIA0KICAgICAgICAgICAgICAgICJzZW50aW1lbnRyIiwgImdwbG90cyIsICJkcGx5ciIsDQogICAgICAgICAgICAgICAgInRtIiwgInN5dXpoZXQiLCAiZmFjdG9leHRyYSIsIA0KICAgICAgICAgICAgICAgICJiZWVzd2FybSIsICJzY2FsZXMiLCAiUkNvbG9yQnJld2VyIiwNCiAgICAgICAgICAgICAgICAiUkFOTiIsICJ0b3BpY21vZGVscyIsICJzdHJpbmdyIiwicGx5ciIsImtuaXRyIikNCiMgY2hlY2sgcGFja2FnZXMgdGhhdCBuZWVkIHRvIGJlIGluc3RhbGxlZC4NCnBhY2thZ2VzLm5lZWRlZD1zZXRkaWZmKHBhY2thZ2VzLnVzZWQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0KGluc3RhbGxlZC5wYWNrYWdlcygpWywxXSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMudXNlZCkpDQojIGluc3RhbGwgYWRkaXRpb25hbCBwYWNrYWdlcw0KaWYobGVuZ3RoKHBhY2thZ2VzLm5lZWRlZCk+MCl7DQogIGluc3RhbGwucGFja2FnZXMocGFja2FnZXMubmVlZGVkLCBkZXBlbmRlbmNpZXMgPSBUUlVFKQ0KfQ0KIyBsb2FkIHBhY2thZ2VzDQpsaWJyYXJ5KCJydmVzdCIpDQpsaWJyYXJ5KCJ0aWJibGUiKQ0KbGlicmFyeSgic3l1emhldCIpDQpsaWJyYXJ5KCJzZW50aW1lbnRyIikNCmxpYnJhcnkoImdwbG90cyIpDQpsaWJyYXJ5KCJwbHlyIikNCmxpYnJhcnkoImRwbHlyIikNCmxpYnJhcnkoInRtIikNCmxpYnJhcnkoInN5dXpoZXQiKQ0KbGlicmFyeSgiZmFjdG9leHRyYSIpDQpsaWJyYXJ5KCJiZWVzd2FybSIpDQpsaWJyYXJ5KCJzY2FsZXMiKQ0KbGlicmFyeSgiUkNvbG9yQnJld2VyIikNCmxpYnJhcnkoIlJBTk4iKQ0KbGlicmFyeSgidG0iKQ0KbGlicmFyeSgidG9waWNtb2RlbHMiKQ0KbGlicmFyeSgic3RyaW5nciIpDQpsaWJyYXJ5KCJrbml0ciIpDQoNCnNvdXJjZSgiLi4vbGliL3Bsb3RzdGFja2VkLlIiKQ0Kc291cmNlKCIuLi9saWIvc3BlZWNoRnVuY3MuUiIpDQpgYGANCg0KYGBge3J9DQpzZW50ZW5jZS5saXN0IDwtIHJlYWQuY3N2KCIuLi9kYXRhL3BoaWxvc29waHlfZGF0YS5jc3YiKQ0KYGBgDQoNCmBgYHtyfQ0Kc29ydCh1bmlxdWUoc2VudGVuY2UubGlzdCRhdXRob3IpKQ0KDQp1bmlxdWUoc2VudGVuY2UubGlzdCR0aXRsZVtzZW50ZW5jZS5saXN0JGF1dGhvcj09IkthbnQiXSkNCg0KdW5pcXVlKHNlbnRlbmNlLmxpc3RbLGMoJ2F1dGhvcicsJ3NjaG9vbCcpXSlbdW5pcXVlKHNlbnRlbmNlLmxpc3RbLGMoJ2F1dGhvcicsJ3NjaG9vbCcpXSkkc2Nob29sICVpbiUgYygiY29tbXVuaXNtIiwiY2FwaXRhbGlzbSIpLF0NCmBgYA0KDQpgYGB7cn0NCmNvbW1jYXAgPC0gYygiY29tbXVuaXNtIiwiY2FwaXRhbGlzbSIpDQpjb21tY2FwIDwtIGMoImVtcGlyaWNpc20iLCJyYXRpb25hbGlzbSIpDQoNCnNlbnRlbmNlLmxpc3QuY29tbWNhcCA8LSBzZW50ZW5jZS5saXN0ICU+JSBmaWx0ZXIoc2Nob29sICVpbiUgY29tbWNhcCkNCg0KYGBgDQoNCg0KDQpgYGB7cn0NCm15LmFkZC5pbmRleCA8LSBmdW5jdGlvbihkZil7DQogIGRmJHNlbnQuaWQgPC0gMTpucm93KGRmKQ0KICByZXR1cm4oZGYpDQp9DQpzZW50ZW5jZS5saXN0LmNvbW1jYXAgPC0gZGRwbHkoc2VudGVuY2UubGlzdC5jb21tY2FwLC4odGl0bGUpLG15LmFkZC5pbmRleCkNCmBgYA0KDQoNCmBgYHtyfQ0KY29ycHVzLmxpc3Q9c2VudGVuY2UubGlzdC5jb21tY2FwWzI6KG5yb3coc2VudGVuY2UubGlzdC5jb21tY2FwKS0xKSwgXQ0Kc2VudGVuY2UucHJlPXNlbnRlbmNlLmxpc3QuY29tbWNhcCRzZW50ZW5jZV9zdHJbMToobnJvdyhzZW50ZW5jZS5saXN0LmNvbW1jYXApLTIpXQ0Kc2VudGVuY2UucG9zdD1zZW50ZW5jZS5saXN0LmNvbW1jYXAkc2VudGVuY2Vfc3RyWzM6KG5yb3coc2VudGVuY2UubGlzdC5jb21tY2FwKS0xKV0NCmNvcnB1cy5saXN0JHNuaXBldHM9cGFzdGUoc2VudGVuY2UucHJlLCBjb3JwdXMubGlzdCRzZW50ZW5jZV9zdHIsIHNlbnRlbmNlLnBvc3QsIHNlcD0iICIpDQpybS5yb3dzPSgxOm5yb3coY29ycHVzLmxpc3QpKVtjb3JwdXMubGlzdCRzZW50LmlkPT0xXQ0Kcm0ucm93cz1jKHJtLnJvd3MsIHJtLnJvd3MtMSkNCmNvcnB1cy5saXN0PWNvcnB1cy5saXN0Wy1ybS5yb3dzLCBdDQpgYGANCg0KIyMgVGV4dCBtaW5pbmcNCmBgYHtyfQ0KZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKGNvcnB1cy5saXN0JHNuaXBldHMpKQ0KYGBgDQoNCiMjIyBUZXh0IGJhc2ljIHByb2Nlc3NpbmcNCkFkYXB0ZWQgZnJvbSA8aHR0cHM6Ly9laWdodDJsYXRlLndvcmRwcmVzcy5jb20vMjAxNS8wOS8yOS9hLWdlbnRsZS1pbnRyb2R1Y3Rpb24tdG8tdG9waWMtbW9kZWxpbmctdXNpbmctci8+Lg0KDQpgYGB7ciwgd2FybmluZyA9IEYsIG1lc3NhZ2U9Rn0NCnNldC5zZWVkKDEpDQppbmRleCA8LSBzYW1wbGUoMTpucm93KGNvcnB1cy5saXN0KSwgMSkNCg0KcHJpbnQoIlNhbXBsZSBzZW50ZW5jZToiKQ0Kd3JpdGVMaW5lcyhhcy5jaGFyYWN0ZXIoZG9jc1tbaW5kZXhdXSkpDQoNCnByaW50KCJBZnRlciBjb252ZXJ0aW5nIHRvIGxvd2VyIGNhc2U6IikNCiNyZW1vdmUgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgc3ltYm9scw0KZG9jcyA8LXRtX21hcChkb2NzLGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpDQp3cml0ZUxpbmVzKGFzLmNoYXJhY3Rlcihkb2NzW1tpbmRleF1dKSkNCg0KcHJpbnQoIkFmdGVyIHJlbW92aW5nIHB1bmN0dWF0aW9uOiIpDQojcmVtb3ZlIHB1bmN0dWF0aW9uDQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVQdW5jdHVhdGlvbikNCndyaXRlTGluZXMoYXMuY2hhcmFjdGVyKGRvY3NbW2luZGV4XV0pKQ0KDQpwcmludCgiQWZ0ZXIgcmVtb3ZpbmcgbnVtYmVyczoiKQ0KI1N0cmlwIGRpZ2l0cw0KZG9jcyA8LSB0bV9tYXAoZG9jcywgcmVtb3ZlTnVtYmVycykNCndyaXRlTGluZXMoYXMuY2hhcmFjdGVyKGRvY3NbW2luZGV4XV0pKQ0KDQpwcmludCgiQWZ0ZXIgcmVtb3Zpbmcgc3RvcHdvcmRzOiIpDQojcmVtb3ZlIHN0b3B3b3Jkcw0KZG9jcyA8LSB0bV9tYXAoZG9jcywgcmVtb3ZlV29yZHMsIHN0b3B3b3JkcygiZW5nbGlzaCIpKQ0Kd3JpdGVMaW5lcyhhcy5jaGFyYWN0ZXIoZG9jc1tbaW5kZXhdXSkpDQoNCnByaW50KCJBZnRlciByZW1vdmluZyB3aGl0ZXNwYWNlOiIpDQojcmVtb3ZlIHdoaXRlc3BhY2UNCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHN0cmlwV2hpdGVzcGFjZSkNCndyaXRlTGluZXMoYXMuY2hhcmFjdGVyKGRvY3NbW2luZGV4XV0pKQ0KDQpwcmludCgiQWZ0ZXIgc3RlbW1pbmc6IikNCiNTdGVtIGRvY3VtZW50DQpkb2NzIDwtIHRtX21hcChkb2NzLHN0ZW1Eb2N1bWVudCkNCndyaXRlTGluZXMoYXMuY2hhcmFjdGVyKGRvY3NbW2luZGV4XV0pKQ0KYGBgDQoNCiMjIyBUb3BpYyBtb2RlbGluZw0KDQpHZW5lcmF0ZSBkb2N1bWVudC10ZXJtIG1hdHJpY2VzLiANCg0KYGBge3IsIGV2YWw9Rn0NCiMgV0FSTklORzogVElNRSBJTlRFTlNJVkUgQ0hVTksuIERPIE5PVCBSVU4gVEhJUyBDSFVOSyBGT1IgRVZBTFVBVElPTg0KIyBUSEUgUkVRVUlSRUQgT1VUUFVUUyBBUkUgU0FWRUQgSU4gT1VUUFVUIEZPTERFUiBGT1IgRUFTWSBBQ0NFU1MuDQoNCmR0bSA8LSBEb2N1bWVudFRlcm1NYXRyaXgoZG9jcykNCiNjb252ZXJ0IHJvd25hbWVzIHRvIGZpbGVuYW1lcyNjb252ZXJ0IHJvd25hbWVzIHRvIGZpbGVuYW1lcw0Kcm93bmFtZXMoZHRtKSA8LSBwYXN0ZShjb3JwdXMubGlzdCRhdXRob3IsIGNvcnB1cy5saXN0JHRpdGxlLA0KICAgICAgICAgICAgICAgICAgICAgICBjb3JwdXMubGlzdCRzZW50LmlkLCBzZXA9Il8iKQ0KDQojRmluZCB0aGUgc3VtIG9mIHdvcmRzIGluIGVhY2ggRG9jdW1lbnQNCnJvd1RvdGFscyA8LSByZXAoTkEsIG5yb3coZHRtKSkNCmZvciAoaSBpbiAxOihucm93KGR0bSklLyU1MDAwKzEpKXsNCiAgDQogIGlmKGkhPShucm93KGR0bSklLyU1MDAwKzEpKXsNCiAgICByb3dUb3RhbHNbKDUwMDAqKGktMSkrMSk6KDUwMDAqaSldIDwtIGFwcGx5KGR0bVsoNTAwMCooaS0xKSsxKTooNTAwMCppKSxdLDEsc3VtKQ0KICB9DQogIGVsc2V7DQogICAgcm93VG90YWxzWyg1MDAwKihpLTEpKzEpOm5yb3coZHRtKV0gPC0gYXBwbHkoZHRtWyg1MDAwKihpLTEpKzEpOm5yb3coZHRtKSxdLDEsc3VtKQ0KICB9DQogIA0KfQ0KDQpkdG0gIDwtIGR0bVtyb3dUb3RhbHM+IDAsIF0NCmNvcnB1cy5saXN0PWNvcnB1cy5saXN0W3Jvd1RvdGFscz4wLCBdDQoNCnNhdmUoZHRtLCBmaWxlID0gIi4uL291dHB1dC9kdG0iKQ0Kc2F2ZShjb3JwdXMubGlzdCwgZmlsZSA9ICIuLi9vdXRwdXQvY29ycHVzLmxpc3QiKQ0KYGBgDQoNCmBgYHtyfQ0KbG9hZCgiLi4vb3V0cHV0L2R0bSIpDQpsb2FkKCIuLi9vdXRwdXQvY29ycHVzLmxpc3QiKQ0KYGBgDQoNCg0KUnVuIExEQQ0KDQpgYGB7ciwgZXZhbD1GfQ0KIyBXQVJOSU5HOiBUSU1FIElOVEVOU0lWRSBDSFVOSy4gRE8gTk9UIFJVTiBUSElTIENIVU5LIEZPUiBFVkFMVUFUSU9ODQojIFRIRSBSRVFVSVJFRCBPVVRQVVRTIEFSRSBTQVZFRCBJTiBPVVRQVVQgRk9MREVSIEZPUiBFQVNZIEFDQ0VTUy4NCg0KI1NldCBwYXJhbWV0ZXJzIGZvciBHaWJicyBzYW1wbGluZw0KYnVybmluIDwtIDQwMDANCml0ZXIgPC0gMjAwMA0KdGhpbiA8LSA1MDANCnNlZWQgPC1saXN0KDIwMDMsNSw2MywxMDAwMDEsNzY1KQ0KbnN0YXJ0IDwtIDUNCmJlc3QgPC0gVFJVRQ0KDQojTnVtYmVyIG9mIHRvcGljcw0KayA8LSA4DQoNCiNSdW4gTERBIHVzaW5nIEdpYmJzIHNhbXBsaW5nDQpsZGFPdXQgPC1MREEoZHRtLCBrLCBtZXRob2Q9IkdpYmJzIiwgY29udHJvbD1saXN0KG5zdGFydD1uc3RhcnQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWQgPSBzZWVkLCBiZXN0PWJlc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVybmluID0gYnVybmluLCBpdGVyID0gaXRlciwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpbj10aGluKSkNCg0Kc2F2ZShsZGFPdXQsIGZpbGUgPSBwYXN0ZSgiLi4vb3V0cHV0L0xEQUdpYmJzIixrLCBzZXA9Il8iKSkNCiN3cml0ZSBvdXQgcmVzdWx0cw0KI2RvY3MgdG8gdG9waWNzDQpsZGFPdXQudG9waWNzIDwtIGFzLm1hdHJpeCh0b3BpY3MobGRhT3V0KSkNCnRhYmxlKGMoMTprLCBsZGFPdXQudG9waWNzKSkNCnNhdmUobGRhT3V0LnRvcGljcyxmaWxlPXBhc3RlKCIuLi9vdXRwdXQvTERBR2liYnMiLGssIkRvY3NUb1RvcGljcyIsIHNlcD0iXyIpKQ0Kd3JpdGUuY3N2KGxkYU91dC50b3BpY3MsZmlsZT1wYXN0ZSgiLi4vb3V0cHV0L0xEQUdpYmJzIixrLCJEb2NzVG9Ub3BpY3MuY3N2Iiwgc2VwPSJfIikpDQoNCiN0b3AgOCB0ZXJtcyBpbiBlYWNoIHRvcGljDQpsZGFPdXQudGVybXMgPC0gYXMubWF0cml4KHRlcm1zKGxkYU91dCw4KSkNCnNhdmUobGRhT3V0LnRlcm1zLGZpbGU9cGFzdGUoIi4uL291dHB1dC9MREFHaWJicyIsaywiVG9waWNzVG9UZXJtcyIsIHNlcD0iXyIpKQ0Kd3JpdGUuY3N2KGxkYU91dC50ZXJtcyxmaWxlPXBhc3RlKCIuLi9vdXRwdXQvTERBR2liYnMiLGssIlRvcGljc1RvVGVybXMuY3N2Iiwgc2VwPSJfIikpDQoNCiNwcm9iYWJpbGl0aWVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHRvcGljIGFzc2lnbm1lbnQNCnRvcGljUHJvYmFiaWxpdGllcyA8LSBhcy5kYXRhLmZyYW1lKGxkYU91dEBnYW1tYSkNCnNhdmUodG9waWNQcm9iYWJpbGl0aWVzLGZpbGU9cGFzdGUoIi4uL291dHB1dC9MREFHaWJicyIsaywiVG9waWNQcm9iYWJpbGl0aWVzIiwgc2VwPSJfIikpDQp3cml0ZS5jc3YodG9waWNQcm9iYWJpbGl0aWVzLGZpbGU9cGFzdGUoIi4uL291dHB1dC9MREFHaWJicyIsaywiVG9waWNQcm9iYWJpbGl0aWVzLmNzdiIsIHNlcD0iXyIpKQ0KYGBgDQoNCmBgYHtyfQ0KbG9hZCgiLi4vb3V0cHV0L0xEQUdpYmJzXzhfRG9jc1RvVG9waWNzIikNCmxvYWQoIi4uL291dHB1dC9MREFHaWJic184X1RvcGljc1RvVGVybXMiKQ0KbG9hZCgiLi4vb3V0cHV0L0xEQUdpYmJzXzhfVG9waWNQcm9iYWJpbGl0aWVzIikNCmBgYA0KDQpgYGB7cn0NCnRlcm1zLmJldGE9bGRhT3V0QGJldGENCnRlcm1zLmJldGE9c2NhbGUodGVybXMuYmV0YSkNCnRvcGljcy50ZXJtcz1OVUxMDQpmb3IoaSBpbiAxOmspew0KICB0b3BpY3MudGVybXM9cmJpbmQodG9waWNzLnRlcm1zLCBsZGFPdXRAdGVybXNbb3JkZXIodGVybXMuYmV0YVtpLF0sIGRlY3JlYXNpbmcgPSBUUlVFKVsxOjddXSkNCn0NCiN0KHRvcGljcy50ZXJtcykNCiNsZGFPdXQudGVybXMNCg0KY2F0KCJUaGUgbW9zdCBwb3B1bGFyIGFuZCBzYWxpZW50IHRlcm1zIGZvciBlYWNoIHRvcGljOlxuXG4iKQ0Ka2FibGUocmJpbmQodCh0b3BpY3MudGVybXMpLGxkYU91dC50ZXJtcyksIGZvcm1hdD0ic2ltcGxlIiwgbGFiZWw9ICJUaGUgbW9zdCBwb3B1bGFyIGFuZCBzYWxpZW50IHRlcm1zIGZvciBlYWNoIHRvcGljIikNCmBgYA0KDQpgYGB7cn0NCnRvcGljcy5oYXNoPWMoIlByb2R1Y3Rpb24iLCJQb2xpdGljcyIsIlRyYWRlIiwiRmluYW5jZSAmIEJhbmtpbmciLCJQcm9wZXJ0eSIsIkFzc2V0cyIsIlNvY2lvZWNvbm9taWNzIiwiVGltZSIpDQpjb3JwdXMubGlzdCRsZGF0b3BpYz1hcy52ZWN0b3IobGRhT3V0LnRvcGljcykNCmNvcnB1cy5saXN0JGxkYWhhc2g9dG9waWNzLmhhc2hbbGRhT3V0LnRvcGljc10NCg0KY29sbmFtZXModG9waWNQcm9iYWJpbGl0aWVzKT10b3BpY3MuaGFzaA0KY29ycHVzLmxpc3QuZGY9Y2JpbmQoY29ycHVzLmxpc3QsIHRvcGljUHJvYmFiaWxpdGllcykNCmBgYA0KDQojIyBDbHVzdGVyaW5nIG9mIHRvcGljcw0KYGBge3IsIGZpZy53aWR0aD04LCBmaWcuaGVpZ2h0PTR9DQpwYXIobWFyPWMoNS4xLCA0LjEsIDQuMSwgMi4xKSkNCnRvcGljLnN1bW1hcnk9dGJsX2RmKGNvcnB1cy5saXN0LmRmKSU+JQ0KICAgICAgICAgICAgICBzZWxlY3QoYXV0aG9yLCBQcm9kdWN0aW9uOlRpbWUpJT4lDQogICAgICAgICAgICAgIGdyb3VwX2J5KGF1dGhvciklPiUNCiAgICAgICAgICAgICAgc3VtbWFyaXNlX2VhY2goZnVucyhtZWFuKSkNCnRvcGljLnN1bW1hcnk9YXMuZGF0YS5mcmFtZSh0b3BpYy5zdW1tYXJ5KQ0Kcm93bmFtZXModG9waWMuc3VtbWFyeSk9dG9waWMuc3VtbWFyeVssMV0NCnRvcGljLnN1bW1hcnkgPC0gdG9waWMuc3VtbWFyeVtjKCJNYXJ4IiwiTGVuaW4iLCJLZXluZXMiLCJTbWl0aCIsIlJpY2FyZG8iKSxdDQoNCiMgWzFdICJQcm9kdWN0aW9uIiAgICAgICAgIlBvbGl0aWNzIiAgICAgICAgICAiVHJhZGUiICAgICAgICAgICAgICJGaW5hbmNlICYgQmFua2luZyIgIlByb3BlcnR5IiAgICAgICAgIA0KIyBbNl0gIkFzc2V0cyIgICAgICAgICAgICAiU29jaW9lY29ub21pY3MiICAgICJUaW1lIiAgICAgDQoNCiMgNiwgNywgNSwgMQ0KDQp0b3BpYy5wbG90PWMoMTo4KQ0KI3ByaW50KHRvcGljcy5oYXNoW3RvcGljLnBsb3RdKQ0KI3RvcGljLnN1bW1hcnkNCmhlYXRtYXAuMihhcy5tYXRyaXgodG9waWMuc3VtbWFyeVssdG9waWMucGxvdCsxXSksIA0KICAgICAgICAgIHNjYWxlID0gImNvbHVtbiIsIGtleT1GLCANCiAgICAgICAgICBjb2wgPSBibHVlcmVkKDEwMCksDQogICAgICAgICAgY2V4Um93ID0gMSwgY2V4Q29sID0gMSwgbWFyZ2lucyA9IGMoNCwgNCksDQogICAgICAgICAgdHJhY2UgPSAibm9uZSIsIGRlbnNpdHkuaW5mbyA9ICJub25lIiwNCiAgICAgICAgICBtYWluID0gIkhlYXRtYXAgb2YgVG9waWNzIGJ5IEF1dGhvciIpDQpgYGANCmBgYHtyLCBmaWcud2lkdGg9My4zLCBmaWcuaGVpZ2h0PTUsIGV2YWwgPSBGfQ0KIyBbMV0gIlByb2R1Y3Rpb24iICAgICAgICAiUG9saXRpY3MiICAgICAgICAgICJUcmFkZSIgICAgICAgICAgICAgIkZpbmFuY2UgJiBCYW5raW5nIiAiUHJvcGVydHkiICAgICAgICAgDQojIFs2XSAiQXNzZXRzIiAgICAgICAgICAgICJTb2Npb2Vjb25vbWljcyIgICAgIlRpbWUiICAgICANCiANCg0KcGFyKG1mcm93PWMoNSwgMSksIG1hcj1jKDEsMSwyLDApLCBidHk9Im4iLCB4YXh0PSJuIiwgeWF4dD0ibiIpDQoNCnRvcGljLnBsb3Q9Yyg2LCA3LCA1LCAxKQ0KcHJpbnQodG9waWNzLmhhc2hbdG9waWMucGxvdF0pDQoNCnNwZWVjaC5kZj10YmxfZGYoY29ycHVzLmxpc3QuZGYpJT4lZmlsdGVyKGF1dGhvcj09Ik1hcngiLCB0aXRsZSA9PSAiVGhlIENvbW11bmlzdCBNYW5pZmVzdG8iKSU+JXNlbGVjdChzZW50LmlkLCBQcm9kdWN0aW9uOlRpbWUpDQpzcGVlY2guZGY9YXMubWF0cml4KHNwZWVjaC5kZikNCnNwZWVjaC5kZlssLTFdPXJlcGxhY2Uoc3BlZWNoLmRmWywtMV0sIHNwZWVjaC5kZlssLTFdPDEvMTUsIDAuMDAxKQ0Kc3BlZWNoLmRmWywtMV09Zi5zbW9vdGgudG9waWMoeD1zcGVlY2guZGZbLDFdLCB5PXNwZWVjaC5kZlssLTFdKQ0KcGxvdC5zdGFja2VkKHNwZWVjaC5kZlssMV0sIHNwZWVjaC5kZlssdG9waWMucGxvdCsxXSwgDQogICAgICAgICAgICAgeGxhYj0iU2VudGVuY2VzIiwgeWxhYj0iVG9waWMgc2hhcmUiLCBtYWluPSJUaGUgQ29tbXVuaXN0IE1hbmlmZXN0bywgS2FybCBNYXJ4IikNCg0Kc3BlZWNoLmRmPXRibF9kZihjb3JwdXMubGlzdC5kZiklPiVmaWx0ZXIoRmlsZT09IldpbGxpYW1KQ2xpbnRvbiIsIHR5cGU9PSJub21pbiIsIFRlcm09PTEpJT4lc2VsZWN0KHNlbnQuaWQsIEVjb25vbXk6TGVnaXNsYXRpb24pDQpzcGVlY2guZGY9YXMubWF0cml4KHNwZWVjaC5kZikNCnNwZWVjaC5kZlssLTFdPXJlcGxhY2Uoc3BlZWNoLmRmWywtMV0sIHNwZWVjaC5kZlssLTFdPDEvMTUsIDAuMDAxKQ0Kc3BlZWNoLmRmWywtMV09Zi5zbW9vdGgudG9waWMoeD1zcGVlY2guZGZbLDFdLCB5PXNwZWVjaC5kZlssLTFdKQ0KcGxvdC5zdGFja2VkKHNwZWVjaC5kZlssMV0sIHNwZWVjaC5kZlssdG9waWMucGxvdCsxXSwNCiAgICAgICAgICAgIHhsYWI9IlNlbnRlbmNlcyIsIHlsYWI9IlRvcGljIHNoYXJlIiwgbWFpbj0iQmlsbCBDbGludG9uLCBOb21pbmF0aW9uIikNCg0Kc3BlZWNoLmRmPXRibF9kZihjb3JwdXMubGlzdC5kZiklPiVmaWx0ZXIoRmlsZT09Ikdlb3JnZVdCdXNoIiwgdHlwZT09Im5vbWluIiwgVGVybT09MSklPiVzZWxlY3Qoc2VudC5pZCwgRWNvbm9teTpMZWdpc2xhdGlvbikNCnNwZWVjaC5kZj1hcy5tYXRyaXgoc3BlZWNoLmRmKQ0Kc3BlZWNoLmRmWywtMV09cmVwbGFjZShzcGVlY2guZGZbLC0xXSwgc3BlZWNoLmRmWywtMV08MS8xNSwgMC4wMDEpDQpzcGVlY2guZGZbLC0xXT1mLnNtb290aC50b3BpYyh4PXNwZWVjaC5kZlssMV0sIHk9c3BlZWNoLmRmWywtMV0pDQpwbG90LnN0YWNrZWQoc3BlZWNoLmRmWywxXSwgc3BlZWNoLmRmWyx0b3BpYy5wbG90KzFdLCANCiAgICAgICAgICAgIHhsYWI9IlNlbnRlbmNlcyIsIHlsYWI9IlRvcGljIHNoYXJlIiwgbWFpbj0iR2VvcmdlIFcgQnVzaCwgTm9taW5hdGlvbiIpDQoNCnNwZWVjaC5kZj10YmxfZGYoY29ycHVzLmxpc3QuZGYpJT4lZmlsdGVyKEZpbGU9PSJCYXJhY2tPYmFtYSIsIHR5cGU9PSJub21pbiIsIFRlcm09PTEpJT4lc2VsZWN0KHNlbnQuaWQsIEVjb25vbXk6TGVnaXNsYXRpb24pDQpzcGVlY2guZGY9YXMubWF0cml4KHNwZWVjaC5kZikNCnNwZWVjaC5kZlssLTFdPXJlcGxhY2Uoc3BlZWNoLmRmWywtMV0sIHNwZWVjaC5kZlssLTFdPDEvMTUsIDAuMDAxKQ0Kc3BlZWNoLmRmWywtMV09Zi5zbW9vdGgudG9waWMoeD1zcGVlY2guZGZbLDFdLCB5PXNwZWVjaC5kZlssLTFdKQ0KcGxvdC5zdGFja2VkKHNwZWVjaC5kZlssMV0sIHNwZWVjaC5kZlssdG9waWMucGxvdCsxXSwNCiAgICAgICAgICAgIHhsYWI9IlNlbnRlbmNlcyIsIHlsYWI9IlRvcGljIHNoYXJlIiwgbWFpbj0iQmFyYWNrIE9iYW1hLCBOb21pbmF0aW9uIikNCg0Kc3BlZWNoLmRmPXRibF9kZihjb3JwdXMubGlzdC5kZiklPiVmaWx0ZXIoRmlsZT09IkRvbmFsZEpUcnVtcCIsIHR5cGU9PSJub21pbiIpJT4lc2VsZWN0KHNlbnQuaWQsIEVjb25vbXk6TGVnaXNsYXRpb24pDQpzcGVlY2guZGY9YXMubWF0cml4KHNwZWVjaC5kZikNCnNwZWVjaC5kZlssLTFdPXJlcGxhY2Uoc3BlZWNoLmRmWywtMV0sIHNwZWVjaC5kZlssLTFdPDEvMTUsIDAuMDAxKQ0Kc3BlZWNoLmRmWywtMV09Zi5zbW9vdGgudG9waWMoeD1zcGVlY2guZGZbLDFdLCB5PXNwZWVjaC5kZlssLTFdKQ0KcGxvdC5zdGFja2VkKHNwZWVjaC5kZlssMV0sIHNwZWVjaC5kZlssdG9waWMucGxvdCsxXSwNCiAgICAgICAgICAgIHhsYWI9IlNlbnRlbmNlcyIsIHlsYWI9IlRvcGljIHNoYXJlIiwgbWFpbj0iRG9uYWxkIFRydW1wLCBOb21pbmF0aW9uIikNCmBgYA0KDQoNCk1pbmQgYW5kIGJvZHkuIENhcnRlc2lhbiAtIGR1YWxpdHkgYmV0d2VlbiBtaW5kIGFuZCBib2R5LiBqdXN0aWNlLCBnb29kLCBtaW5kLiBtYWxlIHZzIGZlbWFsZSwgZmVtaW5pc20gLSB3b2xsc3RvbmVjcmFmdC4gbmF0dXJhbGlzbS4gcmVsaWdpb24sIGdvZC4gRGVvbnRvbGd5IGFuZCBjb25zZXF1ZW50aWFsc20uIGxvY2F0aW9uLiBmcmVlIHdpbGwuIHNvY2lldHkgdnMgc2VsZi4gZmVtYWxlcyBmb2N1c2VkIG1vcmUgb24gc29jaWV0eQ0KDQpnb29kDQpoYXJtDQphY3Rpb24=